/**
 * 微信公众平台开发模式(JAVA) SDK
 * (c) 2012-2013 ____′↘夏悸 <wmails@126.cn>, MIT Licensed
 * http://www.jeasyuicn.com/wechat
 */
package com.gson.inf;

import com.gson.bean.InMessage;
import com.gson.bean.OutMessage;

/**
 * 消息处理器
 * @author GodSon
 *
 */
public interface MessageProcessingHandler {
	
	/**
	 * 统一处理器
	 * @param msg
	 * @return
	 */
	public void allType(InMessage msg, String appId);
	
	/**
	 * 文字内容的消息处理
	 * @param msg
	 * @return
	 */
	public void textTypeMsg(InMessage msg,String appId);
	
	/**
	 * 地理位置类型的消息处理
	 * @param msg
	 * @return
	 */
	public void locationTypeMsg(InMessage msg,String appId);
	
	/**
	 * 图片类型的消息处理
	 * @param msg
	 * @return
	 */
	public void imageTypeMsg(InMessage msg,String appId);
	
	/**
	 * 视频类型的消息处理
	 * @param msg
	 * @return
	 */
	public void videoTypeMsg(InMessage msg,String appId);
	/**
	 * 视频类型的消息处理
	 * @param msg
	 * @return
	 */
	public void shortvideoTypeMsg(InMessage msg,String appId);
	
	/**
	 * 链接类型的消息处理
	 * @param msg
	 * @return
	 */
	public void linkTypeMsg(InMessage msg,String appId);

	/**
	 * 语音类型的消息处理
	 * @param msg
	 * @return
	 */
	public void voiceTypeMsg(InMessage msg,String appId);
	
	/**
	 * 验证消息处理
	 * @param msg
	 * @return
	 */
	public void verifyTypeMsg(InMessage msg,String appId);

	/**
	 * 事件类型的消息处理。<br/>
	 * 在用户首次关注公众账号时，系统将会推送一条subscribe的事件
	 * @param msg
	 * @return
	 */
	public void eventTypeMsg(InMessage msg,String appId);
	/**
	 * 关注/扫描带参数二维码 事件类型的消息处理。<br/>
	 * event:subscribe
	 * @param msg
	 * @return
	 */
	public void eventSubscribeTypeMsg(InMessage msg,String appId);

	/**
	 * 取消关注事件类型的消息处理。<br/>
	 * event:unsubscribe
	 * @param msg
	 * @return
	 */
	public void eventUnsubscribeTypeMsg(InMessage msg,String appId);

	/**
	 * 用户已关注用户-扫描带参数二维码 事件类型的消息处理。<br/>
	 * event:scan
	 * @param msg
	 * @return
	 */
	public void eventScanTypeMsg(InMessage msg,String appId);
	/**
	 * 点击菜单拉取消息时 事件类型的消息处理。<br/>
	 * event:click
	 * @param msg
	 * @return
	 */
	public void eventClickTypeMsg(InMessage msg,String appId);
	
	/**
	 * 点击菜单跳转链接时 事件类型的消息处理。<br/>
	 * event:view
	 * @param msg
	 * @return
	 */
	public void eventViewTypeMsg(InMessage msg,String appId);
	/**
	 *上报地理位置事件 (这个接口和LocationTypeMsg接口有什么不同,暂时不清楚)
	 * event:view
	 * @param msg
	 * @return
	 */
	public void eventLocationTypeMsg(InMessage msg,String appId);



	//**********************第三方平台事件*********************************************
	/**
	 * 第三方平台每隔10分钟推送一次ticke，
	 * @param ticket
	 */
	public void component_verify_ticketTypeMsg(InMessage ticket,String appId);

	/**
	 * 取消授权，
	 * @param ticket
	 */
	public void unauthorizedTypeMsg(InMessage ticket,String appId);

	/**
	 * 更新授权
	 * @param ticket
	 */
	public void updateauthorizedTypeMsg(InMessage ticket,String appId);
	/**
	 * 授权成功通知
	 * @param ticket
	 */
	public void authorizedTypeMsg(InMessage ticket,String appId);


	//********************************************************************


	/**
	 * 处理流程结束，返回输出信息之前执行
	 */
	public void afterProcess(InMessage inMsg, OutMessage outMsg);
	
	/**
	 * 设置输出
	 * @param outMessage
	 */
	public void setOutMessage(OutMessage outMessage);
	
	/**
	 * 处返回输出对象
	 */
	public OutMessage getOutMessage();


}
